 //二分查找
//在一个有序数组中查找具体的某个数字n
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7; //要查找的数字
	//在arr这个有序的数组查找k（7）的值
	int sz = sizeof(arr) / sizeof(arr[0]);  //  数组总大小/ 元素大小= 数组的元素个数


	int left = 0; //数组左边的值
	int  right = sz-1; //数组最右边的值
	
	while (left<=right)
	{
		int mid = (right + left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标是：%d\n", mid);
			break;
		}

	}
	if (left>right)
	{
		printf("找不到");
	}
	return 0;

}


//二分查找  写一个函数实现
//在一个有序数组中查找具体的某个数字n

// int binary_search(int a[], int k, int s) {
// 	int left = 0; //数组左边的值
// 	int  right = s - 1; //数组最右边的值
// 	while (left <= right) //进行多次二分查找的循环条件
// 	{
// 		int mid = (right + left) / 2;
// 		if (a[mid] < k)
// 		{
// 			left = mid + 1;
// 		}
// 		else if (a[mid] > k)
// 		{
// 			right = mid - 1;
// 		}
// 		else
// 		{
// 			return mid; 
// 			break;
// 		}
// 	}
// 	return -1;
// }

// int main() {
// 	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// 	int key = 7; //要查找的数字  //在arr这个有序的数组查找k（7）的值
// 	int sz = sizeof(arr) / sizeof(arr[0]);  //  数组总大小/ 元素大小= 数组的元素个数   ！！！一定要在函数外边 求
// 	//找到了就返回找到的位置的下标 （函数）
// 	//找不到就返回 -1
// 	//数组arr传参，实际传递的不是数组的本省
// 	//仅仅过去了数组首元素的地址
// 	int ret = binary_search(arr,key,sz); //三个实参
// 	if ( -1 == ret) {
// 		printf("找不到\n");
// 	}
// 	else
// 	{
// 		printf("找到了，下标是：%d", ret);
// 	}
	
// 	return 0;

// }